﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Smart
{
    public partial class frmTahsilat : Form
    {
        public Cari SecilenCari { get; set; }
        public string EvrakSeri { get; set; }
        public int EvrakSira { get; set; }
        public string BelgeNo { get; set; }
        public bool EskiEvrak { get; set; }
        public DateTime Tarih { get; set; }
        public string SrmKod { get; set; }
        public bool Degistirilebilir { get; set; }
        List<DbTahsilat> _rows = new List<DbTahsilat>();
        DataTable GridData = new DataTable();

        public frmTahsilat()
        {
            InitializeComponent();
            GridData.Columns.Add("İşlem Tipi", typeof(string));
            GridData.Columns.Add("Tutar", typeof(decimal));
        }

        private void frmTahsilat_Load(object sender, EventArgs e)
        {
            cmbOdemeTipi.Items.Add("Nakit");
            cmbOdemeTipi.Items.Add("Çek");
            cmbOdemeTipi.Items.Add("Senet");
            cmbOdemeTipi.Items.Add("Kredi Kartı");
            cmbOdemeTipi.Focus();
            dteVade.Value = DateTime.Now;

            txtToplam.ReadOnly = true;
            gridView1.VeriKaynagi = GridData;
            gridView1.Columns[0].Width = 130;
            gridView1.Columns[1].Width = 80;

            if (this.EskiEvrak)
            {
                try
                {
                    Cursor.Current = Cursors.WaitCursor;
                    EvrakOku();
                }
                catch (Exception ex)
                {
                    ExceptionHandling.Hand(ex);
                }
                finally
                {
                    Cursor.Current = Cursors.Default;
                }
            }

        }

        private string islemTipiCevir(int tip)
        {
            switch (tip)
            {
                case 0:
                    return "Nakit";
                case 1:
                    return "Çek";
                case 2:
                    return "Senet";
                case 3:
                    return "Kredi Kartı";
                default:
                    return "";
            }
        }

        private void EvrakOku()
        {
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("SELECT * FROM         TBL_TAHSILAT where ths_seri=@seri and ths_sira=@sira ");

                q.Add(sb.ToString());
                q.Add("@seri", SqlDbType.NVarChar, this.EvrakSeri);
                q.Add("@sira", SqlDbType.NVarChar, this.EvrakSira);
                DataTable dt = q.Fill();
                if (dt.Rows.Count > 0)
                {
                    SecilenCari = new Cari().CariBilgileri(dt.Rows[0]["ths_carikod"].ToString());
                    this.Tarih = Cevir.Parse<DateTime>(dt.Rows[0]["ths_tarih"]);
                    this.BelgeNo = dt.Rows[0]["ths_belgeno"].ToString();
                    this.SrmKod = dt.Rows[0]["ths_srm_merkezi"].ToString();
                    this.BelgeNo = dt.Rows[0]["ths_belgeno"].ToString();
                    this.EvrakSeri = dt.Rows[0]["ths_seri"].ToString();
                    this.EvrakSira = Cevir.Parse<int>(dt.Rows[0]["ths_sira"]);


                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        _rows.Add(new DbTahsilat()
                        {
                            Aciklama = dt.Rows[i]["ths_aciklama"].ToString(),
                            BelgeNo = dt.Rows[i]["ths_belgeno"].ToString(),
                            CariKod = dt.Rows[i]["ths_carikod"].ToString(),
                            CekSenetNo = dt.Rows[i]["ths_ceksenet_no"].ToString(),
                            Meblag = Cevir.Parse<decimal>(dt.Rows[i]["ths_meblag"]),
                            SaticiKod = dt.Rows[i]["ths_saticikod"].ToString(),
                            Satir = Cevir.Parse<int>(dt.Rows[i]["ths_satir"]),
                            Seri = this.EvrakSeri,
                            Sira = this.EvrakSira,
                            SrmMerkezi = dt.Rows[i]["ths_srm_merkezi"].ToString(),
                            Tarih = Cevir.Parse<DateTime>(dt.Rows[i]["ths_tarih"]),
                            VadeTarihi = Cevir.Parse<DateTime>(dt.Rows[i]["ths_tarih"]),
                            Tip = Cevir.Parse<int>(dt.Rows[i]["ths_tip"]),
                            ReferansNo = dt.Rows[i]["ths_referans_no"].ToString()
                        });

                        GridData.Rows.Add(islemTipiCevir(Cevir.Parse<int>(dt.Rows[i]["ths_tip"])), Cevir.Parse<decimal>(dt.Rows[i]["ths_meblag"]));
                    }
                }
            }
        }


        private void CreateRefNo()
        {
            string seri = "";
            switch (cmbOdemeTipi.SelectedIndex)
            {
                case 0:
                    seri = Program.Session[Settings.TahsilatNakitSeri].ToString();
                    break;
                case 1:
                    seri = Program.Session[Settings.TahsilatCekSeri].ToString();
                    break;
                case 2:
                    seri = Program.Session[Settings.TahsilatSenetSeri].ToString();
                    break;
                case 3:
                    seri = Program.Session[Settings.TahsilatKrediKartiSeri].ToString();
                    break;
            }
            txtReferansNo.Text = string.Format("{0}-{1}-{2}", seri, DateTime.Now.Year, MaxSatir().ToString("00000000"));
        }

        private int MaxSatir()
        {
            int sira = 0;
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                q.Add("select max(ths_id) FROM TBL_TAHSILAT");
                sira = q.ExecScaler<int>();
            }
            return sira + gridView1.RowCount;
        }

        private void SatirEkle()
        {
            switch (cmbOdemeTipi.SelectedIndex)
            {
                case 0:
                    if (string.IsNullOrEmpty(txtMeblag.Text))
                    {
                        MessageBox.Show("Lütfen Meblağı Giriniz !");
                        return;
                    }
                    break;
                case 3:
                case 2:
                case 1:
                    if (string.IsNullOrEmpty(txtMeblag.Text) && string.IsNullOrEmpty(txtCekSenetNo.Text) && string.IsNullOrEmpty(txtReferansNo.Text))
                    {
                        MessageBox.Show("Eksik Bilgi Girişi yaptınız !");
                        return;
                    }
                    break;
            }

            _rows.Add(new DbTahsilat()
            {
                Aciklama = txtAciklama.Text,
                BelgeNo = BelgeNo,
                CariKod = SecilenCari.Kodu,
                ReferansNo = txtReferansNo.Text,
                CekSenetNo = txtCekSenetNo.Text,
                Meblag = Cevir.Parse<decimal>(txtMeblag.Text),
                VadeTarihi = DateTime.Now,
                Seri = EvrakSeri,
                Sira = EvrakSira,
                Tarih = dteVade.Value,
                Tip = cmbOdemeTipi.SelectedIndex,
                SaticiKod = Program.Session[Settings.PlasiyerKodu].ToString(),
                SrmMerkezi = SrmKod
            });

            GridData.Rows.Add(cmbOdemeTipi.Text, Cevir.Parse<decimal>(txtMeblag.Text));
            txtToplam.Text = _rows.Select(x => x.Meblag).Sum().ToString("n2");
            EkranTemizle();
        }

        bool sipShow = false;
        private void btnKlavye_Click(object sender, EventArgs e)
        {
            if (sipShow)
            {
                sipShow = false;
                Sip.Hide();
            }
            else
            {
                sipShow = true;
                Sip.Show();
            }
        }

        private void btnEkle_Click(object sender, EventArgs e)
        {
            SatirEkle();
        }

        private void btnSil_Click(object sender, EventArgs e)
        {
            if (gridView1.CurrentRowIndex > -1)
            {
                _rows.RemoveAt(gridView1.CurrentRowIndex);
            }
        }

        private void btnKaydet_Click(object sender, EventArgs e)
        {
            DialogResult rs = MessageBox.Show("Kaydetmek istediğinize eminmisiniz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            if (rs == DialogResult.Yes)
            {
                EvrakKayit();
                this.Close();
            }
        }

        private void EkranTemizle()
        {
            cmbOdemeTipi.SelectedIndex = 0;
            txtAciklama.Text = "";
            txtCekSenetNo.Text = "";
            txtMeblag.Text = "";
            txtReferansNo.Text = "";
            cmbOdemeTipi.Focus();
        }

        private void EvrakKayit()
        {
            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                if (_rows.Count > 0)
                {
                    q.Add("delete from TBL_TAHSILAT where ths_seri=@seri and ths_sira=@sira");
                    q.Add("@seri", SqlDbType.NVarChar, _rows[0].Seri, 5);
                    q.Add("@sira", SqlDbType.Int, _rows[0].Sira);
                    q.Exec();
                }
            }

            using (Query q = new Query(ProgramTipleri.SqlCe))
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("INSERT INTO TBL_TAHSILAT (ths_tip, ths_seri, ths_sira, ths_satir, ths_belgeno, ths_tarih,ths_vade_tarih, ths_saticikod, ths_carikod, ths_srm_merkezi, ths_ceksenet_no,ths_referans_no, ths_meblag, ths_aciklama,ths_gonderildi) ");
                sb.Append(" VALUES     (@tip,@seri,@sira,@satir,@belgeno,@tarih,@vadetarihi,@satici,@cari,@srm,@ceksenetno,@referans,@meblag,@aciklama,1)");
                int satir = 0;
                foreach (DbTahsilat ths in _rows)
                {
                    q.Add(sb.ToString());
                    q.Add("@tip", SqlDbType.TinyInt, ths.Tip);
                    q.Add("@seri", SqlDbType.NVarChar, ths.Seri, 5);
                    q.Add("@sira", SqlDbType.Int, ths.Sira);
                    q.Add("@satir", SqlDbType.Int, satir);
                    q.Add("@belgeno", SqlDbType.NVarChar, ths.BelgeNo, 5);
                    q.Add("@tarih", SqlDbType.DateTime, ths.Tarih);
                    q.Add("@vadetarihi", SqlDbType.DateTime, ths.VadeTarihi);
                    q.Add("@satici", SqlDbType.NVarChar, ths.SaticiKod, 25);
                    q.Add("@cari", SqlDbType.NVarChar, ths.CariKod, 25);
                    q.Add("@meblag", SqlDbType.Money, ths.Meblag);
                    q.Add("@ceksenetno", SqlDbType.NVarChar, ths.CekSenetNo);
                    q.Add("@referans", SqlDbType.NVarChar, ths.ReferansNo);
                    q.Add("@srm", SqlDbType.NVarChar, ths.SrmMerkezi, 25);
                    q.Add("@aciklama", SqlDbType.NVarChar, ths.Aciklama, 100);
                    q.Exec();
                    q.Clear();
                    satir++;
                }

                if (_rows.Count > 0)
                {
                    q.Clear();
                    q.Add("update TBL_TAHSILAT set ths_gonderildi=0 where ths_seri=@seri and ths_sira=@sira");
                    q.Add("@seri", SqlDbType.NVarChar, _rows[0].Seri, 5);
                    q.Add("@sira", SqlDbType.Int, _rows[0].Sira);
                    q.Exec();
                }

            }
        }

        private void btnCikis_Click(object sender, EventArgs e)
        {
            DialogResult rs = MessageBox.Show("Çıkmak istediğinize eminmisiniz ?", "Uyarı", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            if (rs == DialogResult.Yes)
            {
                this.Close();
            }
        }

        private void txtReferansNo_GotFocus(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtReferansNo.Text))
            {
                CreateRefNo();
            }
        }

        private void gridView1_Click(object sender, EventArgs e)
        {
            if (gridView1.CurrentRowIndex > -1)
            {
                DbTahsilat ths = _rows[gridView1.CurrentRowIndex];
                cmbOdemeTipi.SelectedIndex = ths.Tip;
                dteVade.Value = ths.VadeTarihi;
                txtCekSenetNo.Text = ths.CekSenetNo;
                txtReferansNo.Text = ths.ReferansNo;
                txtMeblag.Text = ths.Meblag.ToString("n2");
                txtAciklama.Text = ths.Aciklama;
            }
        }

        private void cmbOdemeTipi_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                dteVade.Focus();
            }
        }

        private void dteVade_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtCekSenetNo.Focus();
            }
        }

        private void txtCekSenetNo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtReferansNo.Focus();
            }
        }

        private void txtReferansNo_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtMeblag.Focus();
            }
        }

        private void txtMeblag_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                txtAciklama.Focus();
            }
        }

        private void txtAciklama_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnEkle.Focus();
            }
        }
    }
}